package com.example.permissionservice.service;

import com.example.permissionservice.dao.UserRoleRelationMapper;
import com.example.permissionservice.pojo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class UserRoleRelationService {

    @Autowired
    UserRoleRelationMapper userRoleRelationMapper;

    /**
     * 该方法可以根据用户id列表来删除关系
     */
    public int deleteRelationByUserIdList(List<Integer> idList){
        return userRoleRelationMapper.deleteRelationByUserIdList(idList);
    }

    /**
     * 该方法可以插入多条角色与资源之间的关系(用于更新一个角色拥有的资源)
     */
    public int insertRelation(List<UserRoleRelation> list){
        int iResult = -1;
        if (list != null && list.size() > 0){
            iResult = userRoleRelationMapper.insertList(list);
        }
        return iResult;
    }

    /**
     * 该方法可以通过用户类对象来返回一个用户与角色之间的关系
     */
    public List<UserRoleRelation>  getRelationByUser(UserWithRole user){
        //获取用户id
        int userId = user.getId();
        //获取该角色拥有的资源列表
        List<Integer> roleIdList = user.getRoleIdList();

        List<UserRoleRelation> relationList = new ArrayList<>();
        //不为空时才能更新
        if (roleIdList != null)
            for (Integer roleId : roleIdList){
                UserRoleRelation relation = new UserRoleRelation();
                relation.setUser_id(userId);
                relation.setRole_id(roleId);
                relationList.add(relation);
            }

        return relationList;
    }

    /**
     * 该方法可以通过角色对象来更新关系
     */
    public void updateRelationByUser(UserWithRole user){
        try {
            List<Integer> userIdList = new ArrayList<>();
            userIdList.add(user.getId());
            //先删除旧关系
            deleteRelationByUserIdList(userIdList);
//            System.out.println("删除的关系的RoleId为:"+role.getId());
//            List<RoleResourceRelation> list = getRelationByRole(role);
//            System.out.println("插入的新关系为:"+list);
            //生成新关系
            insertRelation(getRelationByUser(user));
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 该方法可以初始化用户的角色，传入的user对象必须得有id属性!
     */
    public void initRelationByUser(UserWithRole user){
        try {
            List<Integer> userIdList = new ArrayList<>();
            userIdList.add(user.getId());
            //建立初始角色列表
            Integer initRoleId = 3;//初始角色id为3(普通用户)
            List<Integer> initRoleIdList = new ArrayList<>();
            initRoleIdList.add(initRoleId);
            user.setRoleIdList(initRoleIdList);

            //新增初始化的关系
            insertRelation(getRelationByUser(user));
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
